As real-time graphics rendering techniques become more expressive, there is a trend to develop more technically complex shading techniques. This increase in complexity is a result of a desire to express more visually complex imagery. Many artists express complex imagery via the use of shading techniques. This expression is currently limited in several ways by existing shading systems. Current real time shading systems allow a single author to create an entire shading technique. Current real time systems however, do not typically allow authors to compose disparate portions of previously-authored shading techniques into a new, unique technique. Thus, authors are limited by the amount of time they can devote to each individual shading technique because authors cannot easily add additional functionality to shading techniques without completely authoring all aspects of the new technique. Further, reuse of shading techniques by different shading systems is limited because shading techniques developed under one shading system are not fully portable to another shading system.
Most interesting shading techniques today require a certain amount of central processing unit (CPU) and graphics processing unit (GPU) code to help orchestrate the various steps of the effect. For example, rendering real-time shadows could involve rendering the entire scene several times while varying CPU and/or GPU state and code to be executed. A problem with current shading systems however, is the lack of support for CPU and GPU code. Complex shading techniques often require sophisticated, author-written CPU code and/or GPU code to be executed in the context of an application's graphics renderer. Shading systems that support CPU code integration often do not have full portability to other renderers because the CPU code is specific to an individual host renderer. Often the CPU code is physically integrated into the renderer code itself.